// import com.alibaba.druid.DbType_ptr;
// import com.alibaba.druid.sql.ast.SQLStructDataType.SQLStructDataType_Field;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;
// import com.alibaba.druid.util.FnvHash;

// import java.sql.Types;
// import java.util.ArrayList;
// import java.util.Collections;
// import java.util.List;
#pragma once
#include "SQLObjectImpl.h"
#include "SQLDataType.h"

class SQLRowDataType
    : virtual public SQLObjectImpl,
      virtual public SQLDataType//,
      // virtual public std::enable_shared_from_this<SQLRowDataType>
{
public:
  DbType_ptr dbType;
  SQLStructDataType_Field_list_ptr fields;

  SQLRowDataType();

  SQLRowDataType(DbType_ptr dbType);
  SHAREDOBJECT(SQLRowDataType);

  // @Override
  string_ptr getName();

  // @Override
  long nameHashCode64();

  // @Override
  void setName(string_ptr name);

  // @Override
  SQLExpr_list_ptr getArguments();

  // @Override
  BOOL_ptr getWithTimeZone();
  // @Override
  void setWithTimeZone(BOOL_ptr value);

  // @Override
  BOOL_ptr isWithLocalTimeZone();

  // @Override
  void setWithLocalTimeZone(BOOL_ptr value);

  // @Override
  void setDbType(DbType_ptr dbType);

  // @Override
  DbType_ptr getDbType();

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  SQLObject_ptr clone();

  SQLStructDataType_Field_list_ptr getFields();

  SQLStructDataType_Field_ptr addField(SQLName_ptr name, SQLDataType_ptr dataType);

  int jdbcType();

  // @Override
  BOOL_ptr isInt();

  // @Override
  BOOL_ptr isNumberic();

  // @Override
  BOOL_ptr isString();

  // @Override
  BOOL_ptr hasKeyLength();
};
